package com.gl.glcourses.repository.jpa;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import com.gl.glcourses.repository.IParticipanteRepository;
import com.gl.glcourses.vos.EdicionCurso;
import com.gl.glcourses.vos.EstadoEdicionCurso;
import com.gl.glcourses.vos.EstadoParticipante;
import com.gl.glcourses.vos.Participante;
import com.gl.glcourses.vos.TipoParticipante;
import com.gl.glcourses.vos.Usuario;

@Repository
public class JpaParticipanteRepository extends JpaProjectRepository<Participante> implements IParticipanteRepository {

	@Override
	public List<Participante> listarParticipantesPorEstadoPorPM(Usuario pm) {
		Query query = null;
		try {
			query = em.createQuery("FROM Participante p WHERE p.usuario.manager.id = :param");
			query.setParameter("param", pm.getId());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (List<Participante>)query.getResultList();
	}
	
	public List<Participante> listarParticipantePorUsuario(Usuario usuario,EstadoParticipante estado){
		Query query = null;
		try {
			query = em.createQuery("FROM Participante p WHERE p.estadoParticipante = :param1 AND p.usuario = :param2");
			query.setParameter("param1", estado);
			query.setParameter("param2", usuario);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (List<Participante>)query.getResultList();
	}
	@Override
	public List<Participante>listarParticipantesXEstadoEdicion(EstadoEdicionCurso estado, Usuario pm){
			Query query = null;
			try {
				query = em.createQuery("FROM Participante participante WHERE participante.edicionCurso.estadoEdicionCurso = :param1 AND participante.usuario.manager = :param2");
				query.setParameter("param1", estado);
				query.setParameter("param2", pm);
			} catch (Exception e) {
				e.printStackTrace();
			}
			return (List<Participante>)query.getResultList();
		}

	@Override
	public List<Participante> listarAlumnosPresentes(EdicionCurso edicionCurso) {
		Query query = null;
		try { //FALTA TENER EN CUENTA Q SEA DE ESA EDICION
			query = em.createQuery("FROM Participante participante WHERE participante.estadoParticipante = :param1 AND participante.tipoParticipante = :param2 AND participante.edicionCurso = :param3" );
		//	query = em.createQuery("FROM Participante participante WHERE participante.tipoParticipante = :param2");
			query.setParameter("param1", EstadoParticipante.PRESENTE);
			query.setParameter("param2", TipoParticipante.ALUMNO);
			query.setParameter("param3", edicionCurso);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (List<Participante>)query.getResultList();
	}
	
	@Override
	public List<Participante> buscarParticipantesCurso(Long id) {
		Query query = em.createQuery("FROM Participante as participante WHERE participante.edicionCurso.curso.id = :param");
		query.setParameter("param", id);
		return (List<Participante>) query.getResultList();
	}

	@Override
	public List<Participante> listarParticipantesPorEstado(EstadoParticipante estadoParticipante) {
		Query query = null;
		try {
			query = em.createQuery("FROM Participante p WHERE p.estadoParticipante = :param");
			query.setParameter("param", estadoParticipante);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (List<Participante>)query.getResultList();
	}	
	}

